/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controle;


import model.TokenAnalyser;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.LinkedList;
import javax.swing.JOptionPane;
import model.SintaticalAnalyser;
import model.SintaticalAnalyserSimple;
import view.JanelaEntrada;
import view.JanelaSematico;
import view.JanelaTokens;

/**
 *
 * @author Anderson
 */
public class ControllerCompiler implements ActionListener {
    
    private String codigo;
    private JanelaEntrada entrada;
    private JanelaTokens exibir;
    private JanelaSematico exibicao;
    private TokenAnalyser token;
    
    public ControllerCompiler() throws Exception{
        entrada = new JanelaEntrada(this);
        exibir = new JanelaTokens(this);
        exibicao = new JanelaSematico(this);
        exibir.setVisible(true);
        token = new TokenAnalyser(exibir);
        
        //token.inicializarAutomato();
       // token.imprimeAutomato();
        String arquivo = "automato_tabela_teste.csv";
        token.leArquivo_a(arquivo);
        //token.imprimeAutomatoArq();
        token.inicializarAutomato();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==entrada.getBotaoInserir() ){
            LinkedList<String> erro;
               codigo = entrada.getCampoCodigo().getText();
               //codigo+='Ç';
               char[] code = codigo.toCharArray();
              if(token.analyseString(code)){
                  JOptionPane.showMessageDialog(null, "Não foram encontrados erros léxicos");
              }
              SintaticalAnalyserSimple sintatico = new SintaticalAnalyserSimple(token.getTokenList());
              sintatico.imprimeListaToken();
              sintatico.analyseListTokens();
              erro=sintatico.getErros();
              exibicao.setVisible(true);
              for(int i=0; i<erro.size();i++){
              exibicao.preencherTabela(erro.get(i));
              }
              // token.imprimeListaToken();
               
            
        }
    }

    public JanelaEntrada getEntrada() {
        return entrada;
    }
    
    
    
}
